/*
 * @Description:
 * @version:
 * @Author: m
 * @LastEditors: m
 */
import Mock from "mockjs";
import { param2Obj } from "../src/utils";

import user from "./user";
import business from "./business";

const mocks = [...user, ...business];

export function mockXHR() {
	Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send;
	Mock.XHR.prototype.send = function() {
		if (this.custom.xhr) {
			this.custom.xhr.withCredentials = this.withCredentials || false;

			if (this.responseType) {
				this.custom.xhr.responseType = this.responseType;
			}
		}
		this.proxy_send(...arguments);
	};

	function XHR2ExpressReqWrap(respond) {
		return function(options) {
			let result = null;
			if (respond instanceof Function) {
				const { body, type } = options;

				result = respond({
					method: type,
					body: body,
					query: param2Obj(body),
				});
			} else {
				result = respond;
			}
			return Mock.mock(result);
		};
	}

	for (const i of mocks) {
		Mock.mock(new RegExp(i.url), i.type || "get", XHR2ExpressReqWrap(i.response));
	}
}

export default mocks;
